Results TIME models SUBSAMPLING plots 5ha
Data
Organising all tables of models results for all6 forest plo in one object per vital rate, quadrat size scale.
See table S1 for forest plot names.
# Pre-analysis
#Figures colors/labels
cores <- c( quadrat = "#c00000",
`sp:time`= "#203864",
time = "#ed7d31",
`quadrat:time` = "#843c0c",
`quadrat:sp`= "#b666d2",
sp = "#70ad47",
Residual="#ffc000")
labvit <- as_labeller(c(grow = "Growth", mort="Mortality",
rec="Recruitment"))
grpTlab = as_labeller(c(quadrat = "Space", `sp:time`="Species x Time",
`quadrat:time`="Space x Time", `quadrat:sp`= "Species x Space",
sp="Species", Residual = "Residual",
time= "Time"))
grpvitT <- as_labeller(c(grow = "Growth", mort="Mortality",
rec="Recruitment",
quadrat = "Space", `sp:time`="Species x Time",
`quadrat:time`="Space x Time", `quadrat:sp`= "Species x Space",
sp="Species", Residual = "Residual",
time= "Time"))
labplot = as_labeller(c(quadrat = "Space", `sp:time`="Species x Time",
`quadrat:time`="Space x Time", `quadrat:sp`= "Species x Space",
sp="Species", Residual = "Residual",
time= "Time",
fus="Fushan", luq = "Luquillo", lam="Lambir",
pas = "Pasoh", bci="Barro Colorado"))Growth
Import results data to list
path = here("models_outputs/models_time/all", "grow", "table")
files = list.files(path)
all = lapply(files, function(x) get(assign(x, load(paste0(path, "/", x)))))
tudo <- bind_rows(all)Remove intercept to include again as a separate column
intercepts <- tudo %>% filter(term == "intercept")
names(intercepts)[8] = "intercept"
growT <- tudo %>% filter(term != "intercept") %>%
left_join(intercepts[,c(1:4,8)], by= c("sub","data", "fplot", "q_size")) %>%
group_by(sub, data, fplot, q_size) %>%
mutate(VPC = variance/sum(variance)) %>% ungroup() %>%
mutate(term = fct_relevel(term, "quadrat", "sp:time","time",
"quadrat:time",
"quadrat:sp", "sp", "Residual"),
q_size = fct_recode(q_size, `5`= "quad_5", `10`= "quad_10",
`20`="quad_20",
`50`="quad_50", `100`="quad_100")) %>%
mutate(q_size = fct_relevel(q_size, "5","10", "20","50", "100")) %>%
as.data.frame()Divide the sd of the terms by the mean growth (intercept) for each dataset.
growT$stdev = growT$Estimate/growT$interceptNumber of growth models per florest plot and quadrat scale.
table(growT$fplot, growT$q_size)/7##
## 5 10 20 50 100
## bci 10 10 10 10 10
## fus 10 10 10 10 10
## lam 10 10 10 10 10
## luq 10 10 10 10 10
## pas 10 10 10 10 10
Mortality
Import results data to list
path = here("models_outputs/models_time/all", "mort", "table")
files = list.files(path)
all = lapply(files, function(x) get(assign(x, load(paste0(path, "/", x)))))
tudo <- bind_rows(all)Remove intercept to include again as a separate column
intercepts <- tudo %>% filter(term == "intercept")
names(intercepts)[8] = "intercept"
mortT <- tudo %>% filter(term != "intercept") %>%
left_join(intercepts[,c(1:4,8)], by= c("sub","data", "fplot", "q_size")) %>%
group_by(sub,data, fplot, q_size) %>%
mutate(VPC = variance/sum(variance)) %>% ungroup() %>%
mutate(term = fct_relevel(term,"quadrat", "sp:time","time", "quadrat:time",
"quadrat:sp", "sp", "Residual"),
q_size = fct_recode(q_size, `5`= "quad_5", `10`= "quad_10",
`20`="quad_20",
`50`="quad_50", `100`="quad_100")) %>%
mutate(q_size = fct_relevel(q_size, "5","10", "20","50", "100")) %>%
as.data.frame()
mortT$stdev <- mortT$EstimateNumber of mortality models per florest plot and quadrat scale.
table(mortT$fplot, mortT$q_size)/7##
## 5 10 20 50 100
## bci 10 10 10 10 10
## fus 10 10 10 10 10
## lam 10 10 10 10 10
## luq 10 10 10 10 10
## pas 10 10 10 10 10
Recruitment
Import results data to list
path = here("models_outputs/models_time/all", "rec", "table")
files = list.files(path)
all = lapply(files, function(x) get(assign(x, load(paste0(path, "/", x)))))
tudo <- bind_rows(all)Remove intercept to include again as a separate column
intercepts <- tudo %>% filter(term == "intercept")
names(intercepts)[8] = "intercept"
recT <- tudo %>% filter(term != "intercept") %>%
left_join(intercepts[,c(1:4,8)], by= c("sub","data","fplot", "q_size")) %>%
group_by(sub,data, fplot, q_size) %>%
mutate(VPC = variance/sum(variance)) %>% ungroup() %>%
mutate(term = fct_relevel(term,"quadrat", "sp:time", "time", "quadrat:time",
"quadrat:sp", "sp", "Residual"),
q_size = fct_recode(q_size, `5`= "quad_5", `10`= "quad_10",
`20`="quad_20", `50` = "quad_50",
`100`="quad_100")) %>%
mutate(q_size = fct_relevel(q_size, "5","10", "20","50", "100")) %>%
as.data.frame()
recT$stdev <- recT$EstimateNumber of recruitment models per florest plot and quadrat scale.
table(recT$fplot, recT$q_size)/7##
## 5 10 20 50 100
## bci 10 10 10 10 10
## fus 10 10 10 10 10
## lam 10 10 10 10 10
## luq 10 10 10 10 10
## pas 10 10 10 10 10
combining rates
All vital rates
vitalT <- bind_rows(list(grow = growT, mort=mortT, rec=recT),.id="vital") To get ONE value per forest-vital, first I calculate the mean of the 10 medians of the posterior variances. Then I use this value as the Variance and take the VPC and R2.
mvitalT <- vitalT %>% group_by(vital,data,fplot,q_size,term) %>%
summarise(variance = mean(variance),
stdev = mean(stdev)) %>%
mutate(VPC = variance/sum(variance)) %>%
mutate(term = fct_relevel(term, "quadrat", "sp:time","time", "quadrat:time",
"quadrat:sp", "sp","Residual"))
mr2 <- mvitalT %>% filter(term != "Residual") %>%
group_by(vital, data,fplot,q_size) %>%
summarise(r2 = sum(VPC))Saving objects for models results
save(mvitalT, vitalT, file= here("models_outputs", "all_results_time.Rdata"))All the 5ha subsampled plots
SDs
fsd <- vitalT %>% filter(q_size == "5") %>%
ggplot(aes(x=fplot, y=stdev, col=term)) +
geom_quasirandom(alpha=0.5, groupOnX = TRUE) +
facet_grid(vital~term) +
stat_summary(fun=median, size=0.3, fatten=1,col="black",
geom="crossbar", width=0.7)+
scale_color_manual(values = cores) +
theme(legend.position = "none",
panel.background = element_rect(colour="lightgray"),
axis.text.x = element_text(angle=45,hjust=1)) +
labs(title= "SD per subsample of 5ha - 5x5 quadrat scale")
fsdvitalT %>% filter(vital=="grow") %>%
ggplot(aes(x=q_size, y=stdev, col=term)) +
geom_quasirandom(alpha=0.5, groupOnX = TRUE) +
facet_grid(fplot~term, labeller=labplot) +
stat_summary(fun=median, size=0.3, fatten=1,col="black",
geom="crossbar", width=0.7)+
scale_color_manual(values = cores) +
xlab("Spatial scale") +
theme(legend.position = "none",
panel.background = element_rect(colour="lightgray"),
axis.text.x = element_text(angle=45,hjust=1)) +
labs(title= "SD per subsample of 5ha - GROWTH")vitalT %>% filter(vital=="mort") %>%
ggplot(aes(x=q_size, y=stdev, col=term)) +
geom_quasirandom(alpha=0.5, groupOnX = TRUE) +
facet_grid(fplot~term, labeller=labplot) +
stat_summary(fun=median, size=0.3, fatten=1,col="black",
geom="crossbar", width=0.7)+
scale_color_manual(values = cores) +
xlab("Spatial scale") +
theme(legend.position = "none",
panel.background = element_rect(colour="lightgray"),
axis.text.x = element_text(angle=45,hjust=1)) +
labs(title= "SD per subsample of 5ha - MORTALITY")vitalT %>% filter(vital=="rec") %>%
ggplot(aes(x=q_size, y=stdev, col=term)) +
geom_quasirandom(alpha=0.5, groupOnX = TRUE) +
facet_grid(fplot~term, labeller=labplot) +
stat_summary(fun=median, size=0.3, fatten=1,col="black",
geom="crossbar", width=0.7)+
scale_color_manual(values = cores) +
xlab("Spatial scale") +
theme(legend.position = "none",
panel.background = element_rect(colour="lightgray"),
axis.text.x = element_text(angle=45,hjust=1)) +
labs(title= "SD per subsample of 5ha - RECRUITMENT")VPCs
fvpc <- vitalT %>% filter(q_size =="5") %>%
ggplot(aes(x=fplot, y=VPC, col=term)) +
geom_quasirandom(alpha=0.5) +
facet_grid(vital~term, labeller= grpvitT ) +
stat_summary(fun=median, size=0.3, fatten=1,col="black",
geom="crossbar", width=0.7)+
scale_color_manual(values = cores) +
theme(legend.position = "none",
panel.background = element_rect(colour="lightgray"),
axis.text.x = element_text(angle=45,hjust=1)) +
labs(title= "VPC per subsample of 5ha - 5x5")
fvpcfig <- vitalT %>% filter(vital=="grow") %>%
ggplot(aes(x=q_size, y=VPC, col=term)) +
geom_quasirandom(alpha=0.5, groupOnX = TRUE) +
facet_grid(fplot~term, labeller=labplot) +
stat_summary(fun=median, size=0.3, fatten=1,col="black",
geom="crossbar", width=0.7)+
scale_color_manual(values = cores) +
xlab("Spatial scale") +
theme(legend.position = "none",
panel.background = element_rect(colour="lightgray"),
axis.text.x = element_text(angle=45,hjust=1)) +
labs(title= "VPC per subsample of 5ha - GROWTH")
figfig <- vitalT %>% filter(vital=="mort") %>%
ggplot(aes(x=q_size, y=VPC, col=term)) +
geom_quasirandom(alpha=0.5, groupOnX = TRUE) +
facet_grid(fplot~term, labeller=labplot) +
stat_summary(fun=median, size=0.3, fatten=1,col="black",
geom="crossbar", width=0.7)+
scale_color_manual(values = cores) +
xlab("Spatial scale") +
theme(legend.position = "none",
panel.background = element_rect(colour="lightgray"),
axis.text.x = element_text(angle=45,hjust=1)) +
labs(title= "VPC per subsample of 5ha - MORTALITY")
figfig <- vitalT %>% filter(vital=="rec") %>%
ggplot(aes(x=q_size, y=VPC, col=term)) +
geom_quasirandom(alpha=0.5, groupOnX = TRUE) +
facet_grid(fplot~term, labeller=labplot) +
stat_summary(fun=median, size=0.3, fatten=1,col="black",
geom="crossbar", width=0.7)+
scale_color_manual(values = cores) +
xlab("Spatial scale") +
theme(legend.position = "none",
panel.background = element_rect(colour="lightgray"),
axis.text.x = element_text(angle=45,hjust=1)) +
labs(title= "VPC per subsample of 5ha - RECRUITMENT")
figAverage per forest
SD stacked per forest
5x5 m
mvitalT %>% filter(q_size == "5") %>%
ggplot(aes(x=fplot, y=stdev, fill=term, col=term))+
geom_col(alpha=0.7)+
scale_color_manual(values = cores) +
scale_fill_manual(values = cores)+
facet_grid(~vital)VPC per forest
5x5 m
ah <- mvitalT %>% filter(q_size == "5") %>% group_by(vital,term) %>%
summarise(VPC_mean = as.character(round(mean(VPC), 2))) %>%
mutate(x_val = as.numeric(VPC_mean),
y_val = 0.6:6.8)
ah[c(11,13),3] <- c("0.10", "0.30")pm<- mvitalT %>% filter(q_size == "5") %>%
ggplot(aes(y=rev(term), x=VPC)) +
facet_grid(~vital, labeller = grpvitT, scales="free_x") +
geom_jitter(size=5, alpha=0.5, aes(shape=fplot, fill=term), width = 0,
height = 0.15, col="black") +
stat_summary(fun=mean, fun.min=mean, fun.max=mean,
geom="crossbar", width=0.6, fatten=3) +
scale_fill_manual(name= "Forest", values=cores, guide ="none")+
scale_shape_manual(name="Forest",values=c(22,21,24,23,25), #c(15,16,17,18,8)
labels= c("Barro Colorado", "Fushan", "Lambir","Luquillo",
"Pasoh", "Wytham Woods")) +
geom_vline(xintercept=c(0,0.2,0.4,0.6), col='gray', linetype="dashed",
size=0.2) +
scale_y_discrete(labels=c("Residual", "Species", "Species x Space",
"Space x Time", "Time", "Species x Time",
"Space"))+
theme(legend.position= "bottom",
plot.margin = margin(0.1, 0.1, 0.1, 0, "cm"),
legend.background = element_rect(fill="gray95"),
panel.spacing.y = unit(0.8, "cm"),
panel.background = element_rect(colour="lightgray"),
text = element_text(size=16),
axis.text = element_text(size=14)) +
ylab("") + xlab("VPC") +
geom_text(data=ah, aes(x=x_val, y=rev(y_val), label=VPC_mean), hjust=0,
size=4)
pmmvitalT.sum <- mvitalT %>% filter(q_size=="5") %>% ungroup()%>%
group_by(vital,term) %>%
summarise(meanVPC = mean(VPC),
sdVPC = sd(VPC)) %>%
pivot_wider(names_from = vital, values_from = c(meanVPC, sdVPC)) %>%
mutate_if(is.numeric, round, digits=2) %>%
select(term, meanVPC_grow, sdVPC_grow, meanVPC_mort, sdVPC_mort,
meanVPC_rec, sdVPC_rec)
mvitalT.sum %>%
htmlTable(header=c("term" ,rep(c("Mean", "SD"), 3)),
cgroup = c("", "Growth", "Mortality", "Recruitment"),
n.cgroup =c(1,2,2,2))| Â | Growth | Â | Mortality | Â | Recruitment | |||||
|---|---|---|---|---|---|---|---|---|---|---|
| term | Â | Mean | SD | Â | Mean | SD | Â | Mean | SD | |
| 1 | quadrat | Â | 0.02 | 0.02 | Â | 0.02 | 0.02 | Â | 0.04 | 0.04 |
| 2 | sp:time | Â | 0.02 | 0.02 | Â | 0.02 | 0.01 | Â | 0.04 | 0.01 |
| 3 | time | Â | 0.03 | 0.01 | Â | 0.06 | 0.05 | Â | 0.09 | 0.04 |
| 4 | quadrat:time | Â | 0.03 | 0.02 | Â | 0.1 | 0.07 | Â | 0.15 | 0.07 |
| 5 | quadrat:sp | Â | 0.25 | 0.07 | Â | 0.06 | 0.02 | Â | 0.1 | 0.07 |
| 6 | sp | Â | 0.19 | 0.08 | Â | 0.26 | 0.15 | Â | 0.22 | 0.11 |
| 7 | Residual | Â | 0.48 | 0.07 | Â | 0.48 | 0.06 | Â | 0.36 | 0.09 |
TOTAL VPC per vital rate 5x5
To make the bar plots, first I sum all the variances per term and then calculate VPC from this sum
tot.vpc.fig <- mvitalT %>% filter(q_size=="5") %>% ungroup()%>%
group_by(vital,term) %>%
summarise(sumVar =sum(variance)) %>%
mutate(VPC = sumVar/sum(sumVar)) %>%
ggplot(aes(x=vital, fill=term, col=term, y=VPC)) +
geom_col(alpha=0.7, width = 0.6) +
facet_grid(~vital, scales="free_x", labeller = labvit) +
xlab("") + ylab("Mean VPC") +
scale_fill_manual(values=cores, labels=grpTlab) +
scale_color_manual(values=cores, labels=grpTlab) +
theme(legend.position = "none",
panel.spacing.x = unit(0.01, "cm"),
axis.text.x = element_blank(),
axis.ticks = element_blank(),
text = element_text(size=16),
axis.text = element_text(size=14))
tot.vpc.figFIGURE 2
pm + labs(tag="(a)") +
theme( plot.margin = margin(0.1, 0.1, 0.1, 0, "cm"),
plot.tag.position = c(0,0.93),
plot.tag = element_text(size=20, vjust = -0.6, hjust = -1)) +
tot.vpc.fig + labs(tag="(b)") +
theme(plot.tag.position = c(0,0.93),
plot.tag = element_text(size=20, vjust = -0.6, hjust = 0.1)) +
plot_layout(widths = c(1,0.4))ggsave(here("figures","FIG_2.jpeg"), width=14, height=6)FIGURE 3 VCP bar all scales
mvitalT %>% group_by(vital,q_size,term) %>%
summarise(sumVar =sum(variance)) %>%
group_by(vital,q_size)%>%
mutate(VPC = sumVar/sum(sumVar)) %>% select(-sumVar) %>%
pivot_wider(names_from =q_size, values_from = VPC) %>%
mutate_if(is.numeric, round, digits=2) %>%
htmlTable()| vital | term | 5 | 10 | 20 | 50 | 100 | |
|---|---|---|---|---|---|---|---|
| 1 | grow | quadrat | 0.01 | 0.02 | 0.01 | 0.01 | 0.01 |
| 2 | grow | sp:time | 0.02 | 0.02 | 0.02 | 0.02 | 0.01 |
| 3 | grow | time | 0.03 | 0.03 | 0.02 | 0.02 | 0.02 |
| 4 | grow | quadrat:time | 0.02 | 0.02 | 0.01 | 0.01 | 0 |
| 5 | grow | quadrat:sp | 0.25 | 0.2 | 0.14 | 0.08 | 0.04 |
| 6 | grow | sp | 0.2 | 0.19 | 0.19 | 0.2 | 0.2 |
| 7 | grow | Residual | 0.47 | 0.54 | 0.61 | 0.67 | 0.71 |
| 8 | mort | quadrat | 0.02 | 0.01 | 0.01 | 0.01 | 0.01 |
| 9 | mort | sp:time | 0.02 | 0.02 | 0.02 | 0.02 | 0.02 |
| 10 | mort | time | 0.06 | 0.06 | 0.06 | 0.06 | 0.05 |
| 11 | mort | quadrat:time | 0.09 | 0.06 | 0.03 | 0.01 | 0.01 |
| 12 | mort | quadrat:sp | 0.06 | 0.06 | 0.05 | 0.03 | 0.02 |
| 13 | mort | sp | 0.27 | 0.28 | 0.27 | 0.28 | 0.28 |
| 14 | mort | Residual | 0.48 | 0.51 | 0.55 | 0.58 | 0.6 |
| 15 | rec | quadrat | 0.04 | 0.03 | 0.02 | 0.01 | 0.03 |
| 16 | rec | sp:time | 0.04 | 0.04 | 0.04 | 0.04 | 0.05 |
| 17 | rec | time | 0.09 | 0.1 | 0.11 | 0.12 | 0.1 |
| 18 | rec | quadrat:time | 0.15 | 0.13 | 0.11 | 0.08 | 0.1 |
| 19 | rec | quadrat:sp | 0.11 | 0.1 | 0.09 | 0.06 | 0.05 |
| 20 | rec | sp | 0.22 | 0.24 | 0.24 | 0.24 | 0.24 |
| 21 | rec | Residual | 0.34 | 0.37 | 0.39 | 0.43 | 0.43 |
barvpc <- mvitalT %>% group_by(vital,q_size,term) %>%
summarise(sumVar =sum(variance)) %>%
group_by(vital,q_size)%>%
mutate(VPC = sumVar/sum(sumVar)) %>%
ggplot(aes(x=q_size, y=VPC, fill=term, col=term))+
geom_col(alpha=0.7)+
scale_color_manual(values = cores, labels=grpTlab) +
scale_fill_manual(values = cores, labels=grpTlab )+
facet_grid(~vital,labeller = grpvitT) +
xlab("Spatial grain (quadrat size)") +
ylab("VPC") + labs(tag="(b)")
barvpcpng(here("figures", "FIG_3_VPC_time_scales.png"), height = 550, width=1300, res=130)
barvpc
dev.off() ## quartz_off_screen
## 2